/*
    包含应用中所有接口请求函数的模块
    每个函数的返回值都是Promise

    基本要求:能根据接口文档定义接口请求函数

 */
import ajax from "./ajax";
import jsonp from "jsonp"
import { message } from "antd";

const BASE = "http://localhost:3000";

// 登录
export const reqLogin = (username, password) => ajax(BASE + "/login", {username, password}, "POST")

// 获取商品列表
export const reqGetCategorys = (parentId) => ajax(BASE + "/manage/category/list",{parentId})

// 添加分类
export const reqAddCategory = (parentId,categoryName) => ajax(BASE + "/manage/category/add",{parentId,categoryName},"POST")

// 更新分类名称
export const reqUpdateCategory = ({categoryId, categoryName}) => ajax(BASE + "/manage/category/update",{categoryId, categoryName}, "POST")

// 获取商品分页列表
export const reqProducts = (pageNum,pageSize) => ajax(BASE + "/manage/product/list",{pageNum, pageSize});

// 搜索商品分页列表
// searchType:搜索类型,productName / productDesc
export const reqSearchProducts = ({pageNum,pageSize,searchName, searchType}) => ajax(BASE + "/manage/product/search", {
    pageNum,
    pageSize,
    [searchType]:searchName,
})

// 根据ID获取分类名称 
export const reqCategory = (categoryId) => ajax(BASE+ "/manage/category/info", {categoryId}) 

// 对商品进行上架或下架的操作
export const reqUpdateStatus = (productId, status) => ajax(BASE + "/manage/product/updateStatus", {productId,status}, "POST")

// 删除指定名称的图片
export const reqDeleteImg  = (name) => ajax(BASE + "/manage/img/delete", {name}, "POST")

// 添加/修改商品
export const reqAddOrUpdateProduct = (product) => ajax(BASE + "/manage/product/" + (product._id ? "update" : "add"), product, "POST")

// 获取所有角色的列表
export const reqRoles = () => ajax(BASE + "/manage/role/list")

// 添加角色
export const reqAddRole = (roleName) => ajax(BASE + "/manage/role/add",{roleName}, "POST")

// 设置角色权限
export const reqUpdateRole = (role) => ajax(BASE + "/manage/role/update", role, "POST")

// 获取用户列表
export const reqGetUesrsList = () => ajax(BASE + "/manage/user/list")

// 删除用户
export const reqDeleteUser = (userId) => ajax(BASE + "/manage/user/delete", {userId}, "POST")

// 添加更新用户
export const reqAddOrUpdateUser = (user) => ajax(BASE + "/manage/user/" + (user._id ? "update" : "add"),user,"POST");


/*
    jsonp请求的接口请求函数
 */

export const reqWeather = (city) => {

    return new Promise((resolve, reject) =>{
        const url = `https://restapi.amap.com/v3/weather/weatherInfo?key=96a9a7247dad7b25a56acf3ac3016d67&city=${city}&extensions=base`
        // 发送jsonp请求
        jsonp(url, {}, (err, data) => {
            // 如果成功了?
            if(!err && data.lives[0].weather){
                const {weather,temperature} = data.lives[0];
                resolve({weather,temperature})
            }else {
                message.error("获取天气信息失败");
            }
        })   
    })
}

// jsonp请求的原理  
// 在真正说原理之前,先说一下这是干嘛的 解决GET类型的AJAX跨域请求
// 本质: jsonp请求不是ajax请求,而是一般的get请求
// 如何做的: 浏览器端: script标签来发送的,获取js代码,发送请求前,多带了一个参数callback,准备了一个处理响应数据的回调函数
//          1. 动态生成<script>来请求后台接口(src就是接口的url)
//          2. 定义好用于接受响应数据的函数,并将函数名通过请求参数提交给后台
//          4. 收到响应自动执行函数调用的js代码,也就执行了提前定义好的回调函数,并得到了需要的结果数据.
//          服务器端: 服务器返回的是一个函数执行的代码,为响应的代码,传参就是响应的数据
//          3. 接收到请求处理产生结果数据后,返回一个函数调用的js代码,并将结果数据作为实参传入函数调用

